home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 142
/
Gekkan Dennou Club - 2000.3 Vol. 142 (Japan).7z
/
Gekkan Dennou Club - 2000.3 Vol. 142 (Japan) (Track 1).bin
/
docs
/
perl
/
bintree.pm
next >
Wrap
Text File
|
2000-01-23
|
1KB
|
63 lines
#
# Bintree.pm : 二分探索木(オブジェクトのテスト)
#
# 格納するデータはオブジェクトであること
#
package Bintree;
# 終端を示す nil 用無名空ハッシュ
$nil = {};
bless $nil, 'Bintree';
# 二分木を空に初期化
sub make_tree { $nil; }
# 二分木の探索
sub search_tree {
my ($node, $item) = @_;
while( $node != $nil ){
my $result = $item->compare( $node->{'item'} );
if( $result == 0 ){
return 1;
} elsif( $result < 0 ){
$node = $node->{'left'};
} else {
$node = $node->{'right'};
}
}
0;
}
# データの追加
sub insert_tree {
my ($node, $item) = @_;
if( $node == $nil ){
my $new = {'item' => $item, 'left' => $nil, 'right' => $nil };
bless $new, 'Bintree';
return $new;
} else {
my $result = $item->compare( $node->{'item'} );
if( $result < 0 ){
$node->{'left'} = &insert_tree( $node->{'left'}, $item );
} elsif( $result > 0 ){
$node->{'right'} = &insert_tree( $node->{'right'}, $item );
}
}
$node;
}
# 二分木の表示
sub print_tree {
my $node = shift;
if( $node != $nil ){
&print_tree( $node->{'left'} );
$node->{'item'}->print_object();
&print_tree( $node->{'right'} );
}
}
1;
# end of file